Caso de estudio: Barrio Padre Carlos Mugica y su entorno formal
Acá hago una intro épica para mi tema de tesis. Una gran parte del análisis se vincula con este trabajo: https://buenosaires.gob.ar/publicaciones-de-informacion-territorial/indice-de-cobertura-de-las-necesidades-de-la-vida
Tomo el polígono del barrio Padres Carlos Mugica y el de la ciudad de Buenos Aires.
Como el objetivo es observar el acceso a la ciudad que tiene el Barrio Mugica en comparación a la ciudad formal circundante, comienzo creando un buffer a 1500 metros del Barrio Mugica, y tomo los radios censales (censo 2022) que se intersectan con el mismo.
FALSE Reading layer `perimetro' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\perimetro.geojson'
FALSE using driver `GeoJSON'
FALSE Simple feature collection with 1 feature and 2 fields
FALSE Geometry type: MULTIPOLYGON
FALSE Dimension: XY
FALSE Bounding box: xmin: -58.53152 ymin: -34.70529 xmax: -58.33516 ymax: -34.52649
FALSE Geodetic CRS: WGS 84
FALSE Reading layer `sector' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\sector.shp'
FALSE using driver `ESRI Shapefile'
FALSE Simple feature collection with 9 features and 3 fields
FALSE Geometry type: POLYGON
FALSE Dimension: XYZ
FALSE Bounding box: xmin: 26639.73 ymin: 74429.6 xmax: 28327 ymax: 75678.15
FALSE z_range: zmin: -9246.328 zmax: -9246.328
FALSE Projected CRS: POSGAR 2007 / CABA 2019
FALSE Reading layer `radios_censales_filtrados' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\radios_censales_filtrados.geojson'
FALSE using driver `GeoJSON'
FALSE Simple feature collection with 3820 features and 11 fields
FALSE Geometry type: MULTIPOLYGON
FALSE Dimension: XY
FALSE Bounding box: xmin: -58.53092 ymin: -34.70544 xmax: -58.33514 ymax: -34.5265
FALSE Geodetic CRS: WGS 84
Imagen 1. Ciudad Autónoma de Buenos Aires, polígono del Barrio Padre Carlos Mugica definido en la ley N° 6.129 (2018) y buffer de 1500m en torno al mismo.
Imagen 2. Radios Censales que se intersectan con el buffer (imagen 2)
En base a eso, excluyo ciertos radios donde no predomina el uso residencial, ya que lo que busco observar es el acceso que tienen las personas desde sus viviendas a los servicios urbanos. Los resultantes serán los radios que comprenden el Barrio Mugica, y los sectores que cuentan con la proximidad suficiente como para considerarse el entorno urbano formal al que debe integrarse la urbanización informal. Para filtrar los radios censales calculo la densidad de viviendas por radio censal y excluyo aquellos cuyo valor es menor a 3500.
El mapa resultante es el siguiente:
Imagen 3. Radios censales seleccionados.
Calculo la sumatoria de los radios formales elegidos, y la divido entre el área del Barrio Mugica para agrupar los radios en “sectores próximos”, y conformar así unidades comparables.
FALSE [1] 5.710156
Los sectores próximos se agrupan entonces de la siguiente manera, y serán comparadas sus características con las del Barrio Mugica:
Imagen 5. Radios censales seleccionados agrupados en el Barrio Mugica y 6 sectores próximos.
Para estudiar el acceso que tiene la población a los servicios de la ciudad, tengo en cuenta el traslado a pie y por medios de transporte públicos. En primer lugar, trazo isocronas desde 5 puntos aleatorios definidos dentro del polígono del Barrio Mugica, y de cada uno de los sectores próximos. Tomo los radios censales seleccionados y agrupados previamente y defino los polígonos totales de los sectores próximos.
FALSE Reading layer `puntos_aleatorios_bm' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\puntos_aleatorios_bm.geojson'
FALSE using driver `GeoJSON'
FALSE Simple feature collection with 9 features and 3 fields
FALSE Geometry type: POINT
FALSE Dimension: XY
FALSE Bounding box: xmin: 26731.95 ymin: 74666.48 xmax: 27969.53 ymax: 75617.25
FALSE Projected CRS: POSGAR 2007 / CABA 2019
FALSE Reading layer `isocronas15.3_bm' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\isocronas15.3_bm.geojson'
FALSE using driver `GeoJSON'
FALSE Simple feature collection with 5 features and 3 fields
FALSE Geometry type: MULTIPOLYGON
FALSE Dimension: XY
FALSE Bounding box: xmin: -58.4002 ymin: -34.59451 xmax: -58.36737 ymax: -34.57368
FALSE Geodetic CRS: WGS 84
FALSE Reading layer `puntos_aleatorios_sp' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\puntos_aleatorios_sp.geojson'
FALSE using driver `GeoJSON'
FALSE Simple feature collection with 30 features and 2 fields
FALSE Geometry type: POINT
FALSE Dimension: XY
FALSE Bounding box: xmin: -58.40599 ymin: -34.60153 xmax: -58.37321 ymax: -34.58191
FALSE Geodetic CRS: WGS 84
FALSE Reading layer `isocronas15_sp' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\isocronas15_sp.geojson'
FALSE using driver `GeoJSON'
FALSE Simple feature collection with 30 features and 3 fields
FALSE Geometry type: MULTIPOLYGON
FALSE Dimension: XY
FALSE Bounding box: xmin: -58.41506 ymin: -34.61098 xmax: -58.36295 ymax: -34.57408
FALSE Geodetic CRS: WGS 84
Imagen 5. Polígonos globales de los sectores próximos conformados por sus radios censales.

De esta manera, tengo 5 puntos aleatorios en cada sector, con una isocrona partiendo de cada uno. En total son 35 puntos e isocronas, contando los propios del Barrio.
Imagen 6. Isocronas de 15 minutos a pie desde los puntos aleatotios dentro del Barrio Mugica y de cada uno de los 6 sectores próximos.
Además de las zonas a las cuales la población puede acceder a pie, tengo en cuenta las que son accesible utilizando todos los medios de transporte público al alcance. Para encontrar todos los medios de transporte a incluir, tomo las isocronas y las reduzco 150 metros en todo su contorno (equivalentes a 2 minutos a pie), ya que no tiene sentido utilizar aquellas paradas/estaciones/puntos de bicicletas de la ciudad que están en esa área, porque para ese momento, el viaje desde el punto ya habría durado 15 minutos, y es el límite superior que quiero conservar. Además, debe tenerse en cuenta el tiempo promedio que lleva ir de una parada a otra, por lo que contar con menos implicaría no poder recorrer ni una parada desde el momento en el que se toma el colectivo por ejemplo.
El tiempo promedio que tarda un colectivo en recorrer una parada a otra en la Ciudad de Buenos Aires puede variar según diversos factores, como la línea específica, la hora del día y las condiciones del tráfico. Sin embargo, algunas estimaciones generales:
Velocidad promedio: En trayectos urbanos dentro de la ciudad, la velocidad promedio de los colectivos es de aproximadamente 10,5 km/h. Por ejemplo, un viaje entre Parque Centenario y Plaza de Mayo toma alrededor de 40 minutos en colectivo.
Distancia entre paradas: Las paradas suelen estar separadas por unos 400 metros en promedio, especialmente en corredores como el Metrobús Juan B. Justo.
Tiempo entre paradas: Dado lo anterior, el tiempo entre una parada y la siguiente suele oscilar entre 2 y 5 minutos, dependiendo del tráfico y la frecuencia del servicio.
Metrobús: En los corredores del Metrobús, que cuentan con carriles exclusivos, los tiempos de viaje pueden reducirse hasta en un 40%.
Entonces, si tomo mínimo del tiempo estimado de una parada, 2 minutos, necesito reducir las isocronas a 13 minutos para seleccionar así los medios de transporte más alejados que se pueden alcanzar desde los puntos. (Una persona promedio puede caminar entre 130 y 170 metros en 2 minutos en la ciudad, dependiendo del flujo peatonal, semáforos, y estado de las veredas.)
(https://www.infobae.com/tendencias/2016/12/12/como-se-viaja-en-transporte-publico-en-la-ciudad-de-buenos-aires/ https://www.clarin.com/ciudades/capital-gba-tarda-90-minutos-promedio-ir-volver-trabajo_0_Hkee2kFif.html?srsltid=AfmBOoovC3hiKDQGJMDZW-2lKp3s5LDfDqLUZcFnCsPbcLcvVbHwzUh6 https://buenosaires.gob.ar/sites/default/files/2023-04/Viajes_Transporte_P%C3%BAblico_202202%20con%20dise%C3%B1o%20actualizado.pdf https://buenosaires.gob.ar/movilidad/metrobus/metrobus-juan-b-justo https://www.buenosairesbus.com/seguimiento https://transport.opendatasoft.com/explore/dataset/moovit-datos/table/ https://revistacolectibondi.com.ar/2024/12/12/cuanto-tiempo-pasamos-en-el-colectivo/ https://es.wikipedia.org/wiki/Metrob%C3%BAs_(Buenos_Aires))
Como OSMR(usado para calcular las isocronas) utiliza una medición de 83.33m/minuto, en vez de hacer nuevamente las isocronas a 13 minutos (proceso más costoso), las reduzco con un buffer a -166.66m.
FALSE Reading layer `paradas_bm' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\paradas_bm.geojson'
FALSE using driver `GeoJSON'
FALSE Simple feature collection with 122 features and 17 fields
FALSE Geometry type: POINT
FALSE Dimension: XY
FALSE Bounding box: xmin: 5648073 ymin: 6171397 xmax: 5649523 ymax: 6172984
FALSE Projected CRS: POSGAR 94 / Argentina 5
FALSE Reading layer `paradas_sp' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\paradas_sp.geojson'
FALSE using driver `GeoJSON'
FALSE Simple feature collection with 2438 features and 20 fields
FALSE Geometry type: POINT
FALSE Dimension: XY
FALSE Bounding box: xmin: 5645647 ymin: 6169678 xmax: 5649683 ymax: 6173137
FALSE Projected CRS: POSGAR 94 / Argentina 5
FALSE Reading layer `recorridos_sp' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\recorridos_sp.geojson'
FALSE using driver `GeoJSON'
FALSE Simple feature collection with 488 features and 11 fields
FALSE Geometry type: MULTILINESTRING
FALSE Dimension: XY
FALSE Bounding box: xmin: 5572929 ymin: 6121664 xmax: 5689963 ymax: 6233380
FALSE Projected CRS: POSGAR 94 / Argentina 5
FALSE Reading layer `recorridos_bm' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\recorridos_bm.geojson'
FALSE using driver `GeoJSON'
FALSE Simple feature collection with 244 features and 11 fields
FALSE Geometry type: MULTILINESTRING
FALSE Dimension: XY
FALSE Bounding box: xmin: 5573347 ymin: 6121664 xmax: 5689963 ymax: 6233308
FALSE Projected CRS: POSGAR 94 / Argentina 5
Imagen 7. Recorridos enteros de los colectivos que pasan por las paradas seleccionadas. Cada recorrido tiene una etiqueta que expresa la línea, recorrido y sentido del mismo.
recorridos_bm <- recorridos_bm %>% rename(geometry_recorrido = geometry)
recorridos_bm_df <- st_drop_geometry(recorridos_bm)
names(paradas_bm)[names(paradas_bm) == “geometry”] <- “geometry_parada” st_geometry(paradas_bm) <- “geometry_parada”
paradas_desde_bm <- paradas_bm %>% unnest(linea_sentido) %>% filter(linea_sentido != ” NANA”) %>% select(fid, id_origen, geometry_parada, geometry_puntos, hasta_distancia, hasta_tiempo, desde_tiempo, linea_sentido)
paradas_desde_bm <- paradas_desde_bm %>% mutate(geometry_parada = st_geometry(.))
recorridos_desde_bm <- paradas_desde_bm %>% left_join( recorridos_bm_df %>% select(linea_sentido, geometry_recorrido), by = “linea_sentido” )
recorridos_desde_bm <- st_as_sf(recorridos_desde_bm, sf_column_name = “geometry_parada”)
#Calculo en m la distancia que se puede recorrer con el tiempo disponible que queda del viaje de 15m desde la parada a la que se llega en adelante: ##recorridos_desde_bm = recorridos_desde_bm %>% ## mutate(desde_distancia = desde_tiempo*250) #Teniendo en cuenta que la velocidad efectiva promedio del servicio contando paradas son 15km/m
proyectar_punto_en_linea <- function(geom_linea, geom_punto) { nearest_line <- st_nearest_points(geom_punto, geom_linea) points <- st_cast(nearest_line, “POINT”)
if (length(points) != 2) { warning(“Projection failed.”) return(NA) }
projected_point <- points[2]
# Set CRS explicitly projected_point <- st_set_crs(projected_point, st_crs(geom_linea))
return(projected_point) }
cortar_linea_desde_punto <- function(geom_linea, geom_punto, dist_max_m) { if (st_crs(geom_linea) != st_crs(geom_punto)) { print(st_crs(geom_linea)) print(st_crs(geom_punto)) stop(“CRS mismatch between line and point”) }
# Project the point onto the line punto_proyectado <- proyectar_punto_en_linea(geom_linea, geom_punto)
# Cut the line at the projected point cortar_linea_raw <- tryCatch( lwgeom::st_split(geom_linea, punto_proyectado), error = function(e) return(NA) )
if (is.na(cortar_linea_raw)) return(NA)
cortar_linea <- st_collection_extract(cortar_linea_raw, “LINESTRING”)
if (length(cortar_linea) < 2) return(NA)
dists <- st_distance(st_startpoint(cortar_linea), punto_proyectado) segmento_proximo <- cortar_linea[[which.min(as.numeric(dists))]]
largo_total <- as.numeric(st_length(segmento_proximo))
if (dist_max_m >= largo_total) { return(segmento_proximo) }
corte_punto <- st_line_sample(segmento_proximo, sample = dist_max_m / largo_total)
corte_final_raw <- tryCatch( lwgeom::st_split(segmento_proximo, corte_punto), error = function(e) return(NA) )
if (is.na(corte_final_raw)) return(NA)
corte_final <- st_collection_extract(corte_final_raw, “LINESTRING”)
return(corte_final[[1]]) }
recorridos_desde_bm <- recorridos_desde_bm %>% rowwise() %>% mutate( geometry_parada_proyectada = list(proyectar_punto_en_linea(geometry_recorrido, geometry_parada)), recorrido_desde_parada = list(cortar_linea_desde_punto(geometry_recorrido, geometry_parada_proyectada, desde_distancia)) ) %>% ungroup()
Comercios dentro del Barrio Mugica
FALSE Driver: GPKG
FALSE Available layers:
FALSE layer_name geometry_type features fields
FALSE 1 alturas Polygon 4693 19
FALSE 2 poligono_ley 3D Multi Line String 1 1
FALSE 3 comercios Point 1510 16
FALSE 4 alturas_construidas Polygon 4226 7
FALSE 5 vivienda_nueva Polygon 786 9
FALSE 6 direcciones Point 7772 12
FALSE 7 zonificacion Polygon 305 4
FALSE 8 parcelaria Polygon 4190 27
FALSE 9 parcelaria_puntos Point 4190 27
FALSE 10 manzanas 114 17
FALSE 11 sectores Polygon 9 3
FALSE 12 sectores_puntos Point 9 3
FALSE 13 calles 95 2
FALSE 14 edificios_publicos Polygon 15 3
FALSE 15 espacios_publicos Polygon 40 5
FALSE 16 organizaciones_sociales Polygon 59 16
FALSE crs_name
FALSE 1 POSGAR 2007 / CABA 2019
FALSE 2 Campo Inchauspe / Argentina 5
FALSE 3 POSGAR 2007 / CABA 2019
FALSE 4 POSGAR 2007 / CABA 2019
FALSE 5 POSGAR 2007 / CABA 2019
FALSE 6 POSGAR 2007 / CABA 2019
FALSE 7 POSGAR 2007 / CABA 2019
FALSE 8 POSGAR 2007 / CABA 2019
FALSE 9 POSGAR 2007 / CABA 2019
FALSE 10 POSGAR 2007 / CABA 2019
FALSE 11 POSGAR 2007 / CABA 2019
FALSE 12 POSGAR 2007 / CABA 2019
FALSE 13 POSGAR 2007 / CABA 2019
FALSE 14 POSGAR 2007 / CABA 2019
FALSE 15 POSGAR 2007 / CABA 2019
FALSE 16 POSGAR 2007 / CABA 2019
FALSE Reading layer `comercios' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\informacion_territorial.gpkg'
FALSE using driver `GPKG'
FALSE Simple feature collection with 1510 features and 16 fields (with 155 geometries empty)
FALSE Geometry type: POINT
FALSE Dimension: XY
FALSE Bounding box: xmin: 26665.01 ymin: 74469.82 xmax: 28292.31 ymax: 75662.99
FALSE Projected CRS: POSGAR 2007 / CABA 2019
FALSE Reading layer `Supermercados' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\meu_tesis_supermercados_caba.kml'
FALSE using driver `KML'
FALSE Simple feature collection with 44 features and 2 fields
FALSE Geometry type: POINT
FALSE Dimension: XYZ
FALSE Bounding box: xmin: -58.45161 ymin: -34.61856 xmax: -58.37251 ymax: -34.57343
FALSE z_range: zmin: 0 zmax: 0
FALSE Geodetic CRS: WGS 84
Comercios en los sectores formales próximos
Intersectando el callejero con los polígonos del Barrio Mugica y de los sectores próximos puedo calcular la irrigación vial al polígono.
FALSE Reading layer `calles' from data source
FALSE `C:\Users\as\Documents\00_TESIS\meu_tesis\data\calles.shp'
FALSE using driver `ESRI Shapefile'
FALSE Simple feature collection with 31904 features and 22 fields
FALSE Geometry type: LINESTRING
FALSE Dimension: XY
FALSE Bounding box: xmin: -58.53244 ymin: -34.70574 xmax: -58.34191 ymax: -34.52947
FALSE Geodetic CRS: WGS 84
ggplot(b_buffer) + geom_sf()